import axios from "axios";
import type { ResponseType, TodoList } from "./types";

// 1. 获取todoList
export const getTodosApi = () => {
  /*  
    get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
      <T = any, R = AxiosResponse<T>, D = any> get函数接受的泛型参数，一共接受三个
        T = any -> 定义了一个泛型参数T，它的默认类型是any
      (url: string, config?: AxiosRequestConfig<D>) get函数接受参数，一共接受两个
      : Promise<R> get函数返回值类型
        整体返回值类型是一个Promise对象，对象内部的结果值是R类型（R就是第二个泛型参数）

    需求：定义接口函数的返回值类型
    解决：axios.get<any, 具体返回值数据类型>("http://localhost:3000/todos");
      第二个泛型参数就是返回值类型
  */
  // return axios.get("http://localhost:3000/todos");
  return axios.get<any, ResponseType<TodoList>>("/api/todos");
};

// 2. 添加todo
export const addTodoApi = (name: string) => {
  return axios.post<any, ResponseType<null>>("/api/todo", { name });
};

// 3. 更新单个todo
export const updateTodoIsDoneApi = (id: number) => {
  return axios.put<any, ResponseType<null>>("/api/todo/" + id);
};
